import api from "@/utils";
import { AxiosResponse } from "axios";
import { toRaw, UnwrapRef } from "vue";
import router from "@/router";
import { User } from "@/models/User";

export class AuthenticationService {
  login(loginForm: UnwrapRef<User>) {
    api.http
      .post("/login", loginForm)
      .then((res: AxiosResponse) => {
        console.log(res);
        sessionStorage.setItem("token", res.data.name);
        //可以用用户id，也能唯一区分
        sessionStorage.setItem("userNo", res.data.principal.userNo);
        const menu = JSON.stringify(res.data.principal.menuList);
        sessionStorage.setItem("menu", menu);
        // 不加.then 会提示 Promise returned from push is ignored. 具体如何优化还没想好.
        router.push("/home");
      })
      .catch((err: string) => {
        console.log(err);
      });
    // toRaw 返回 reactive 或 readonly 代理的原始对象。这是一个“逃生舱”，可用于临时读取数据而无需承担代理访问/跟踪的开销，也可用于写入数据而避免触发更改。不建议保留对原始对象的持久引用。请谨慎使用。
    console.log("values", loginForm, toRaw(loginForm));
  }

  logout() {
    api.http
      .get("/logout")
      .then(() => {
        sessionStorage.removeItem("token");
        sessionStorage.removeItem("userNo");
        sessionStorage.removeItem("menu");
        router.push("/login");
      })
      .catch((err: string) => {
        console.log(err);
      });
  }
}
